home *** CD-ROM | disk | FTP | other *** search
/ Aminet 33 / Aminet 33 - October 1999.iso / Aminet / util / misc / VMM_src.lha / VMM / find_dev_params.c < prev    next >
Encoding:
C/C++ Source or Header  |  1995-12-16  |  2.0 KB  |  74 lines

  1. #include <exec/types.h>
  2. #include "defs.h"
  3.  
  4. static char rcsid [] = "$Id: find_dev_params.c,v 3.6 95/12/16 18:36:44 Martin_Apel Exp $";
  5.  
  6. BOOL FindDevParams (char *logical_dev, struct DOSDevParams *ddp)
  7.  
  8. {
  9. struct DosList *dl;
  10. struct DosEnvec *de;
  11. struct FileSysStartupMsg *fssm;
  12.  
  13. dl = LockDosList (LDF_DEVICES | LDF_WRITE);
  14.  
  15. dl = FindDosEntry (dl, logical_dev, LDF_DEVICES);
  16. if ((dl == NULL) ||
  17.     (TypeOfMem (BADDR (dl->dol_misc.dol_handler.dol_Startup)) == NULL))
  18.   {
  19.   UnLockDosList (LDF_DEVICES | LDF_WRITE);
  20.   return (FALSE);
  21.   }
  22.  
  23. fssm = (struct FileSysStartupMsg*) 
  24.                      BADDR (dl->dol_misc.dol_handler.dol_Startup);
  25. de = (struct DosEnvec*) BADDR (fssm->fssm_Environ);
  26. ddp->heads = de->de_Surfaces;
  27. ddp->secs_per_track = de->de_BlocksPerTrack;
  28. ddp->low_cyl = de->de_LowCyl;
  29. ddp->high_cyl = de->de_HighCyl;
  30. ddp->res_start = de->de_Reserved;
  31. ddp->res_end = de->de_PreAlloc;
  32. ddp->block_size = de->de_SizeBlock * sizeof (ULONG);
  33. ddp->secs_per_block = de->de_SectorPerBlock;
  34. ddp->logical_dev_name = (char*)(BADDR (dl->dol_Name)) + 1;
  35. ddp->unit = fssm->fssm_Unit;
  36. ddp->flags = fssm->fssm_Flags;
  37. ddp->MaxTransfer = de->de_MaxTransfer;
  38. Forbid ();
  39. ddp->device = (struct Device*) FindName (&(SysBase->DeviceList),
  40.                           (UBYTE*)((char*)(BADDR (fssm->fssm_Device)) + 1));
  41. Permit ();
  42. if (dl->dol_Task == NULL)
  43.   ddp->SysTask = NULL;
  44. else
  45.   ddp->SysTask = (struct Task*)dl->dol_Task - 1;
  46. UnLockDosList (LDF_DEVICES | LDF_WRITE);
  47. return (TRUE);
  48. }
  49.  
  50. /***********************************************************************/
  51.  
  52. BOOL GetPartName (char *part, char *filename)
  53.  
  54. /* Finds out the partition, on which "filename" resides and puts
  55.  * the partition name into part
  56.  */
  57. {
  58. struct DevProc *PartInfo;
  59. struct Task *DevTask;
  60.  
  61. if ((PartInfo = GetDeviceProc (filename, NULL)) == NULL)
  62.   return (FALSE);
  63.  
  64. DevTask = (struct Task*)PartInfo->dvp_Port->mp_SigTask;
  65. strcpy (part, DevTask->tc_Node.ln_Name);
  66.  
  67. PRINT_DEB ("Converting filename:", 0L);
  68. PRINT_DEB (filename, 0L);
  69. PRINT_DEB (part, 0L);
  70.  
  71. FreeDeviceProc (PartInfo);
  72. return (TRUE);
  73. }
  74.